package com.f21.f21assessoria.model.cadastro;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.*;

import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type;

import com.f21.f21assessoria.enums.Perfis;
import com.f21.f21assessoria.enums.Status;


@Entity
public class Usuario implements Serializable {

	private static final long serialVersionUID = 1L;
	public final static int MASCULINO = 1;
	public final static int FEMININO = 0;

	@Id
	@GeneratedValue
	private long id;
	private String nome;
	@Column(columnDefinition = "integer")
	@Type(type = "com.f21.f21assessoria.enums.GenericEnumUserType", 
	        parameters = { 
	        @Parameter(
	        		name = "enumClass", 
	                value = "com.f21.f21assessoria.enums.Status") })
	private Status status;
	private int sexo;
	@Temporal(TemporalType.DATE)
	private Date dataNasc;
	private String cpf;
	private String email;
	private String Rg;
	@ElementCollection(fetch=FetchType.EAGER)
	@Column(columnDefinition = "integer")
	@Type(type = "com.f21.f21assessoria.enums.GenericEnumUserType", 
	        parameters = { 
	        @Parameter(
	        		name = "enumClass", 
	                value = "com.f21.f21assessoria.enums.Perfis") })
	private List<Perfis> perfis;
	@Embedded
	private Endereco endereco;

	@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
	private List<Telefone> telefones;

	
	public Usuario() {
		this.endereco = new Endereco();
		this.telefones = new ArrayList<Telefone>();
		this.perfis = new ArrayList<Perfis>();
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public List<Telefone> getTelefones() {
		return telefones;
	}

	public void setTelefones(List<Telefone> telefones) {
		this.telefones = telefones;
	}

	public void setTelefones(String numero) {
		Telefone tel = new Telefone(numero);
		tel.setUser(this);
		this.telefones.add(tel);
	}

	

	public int getSexo() {
		return sexo;
	}

	public void setSexo(int sexo) {
		this.sexo = sexo;
	}

	public Date getDataNasc() {
		return dataNasc;
	}

	public void setDataNasc(Date dataNasc) {
		this.dataNasc = dataNasc;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getRg() {
		return Rg;

	}

	public void setRg(String rg) {
		Rg = rg;
	}
			
	
	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}
	
	public void setStatus(Integer status) {
		this.status = Status.valueOf(status.intValue());
	}

	public List<Perfis> getPerfis() {
		return perfis;
	}

	public void setPerfis(List<Perfis> perfis) {
		this.perfis = perfis;
	}

	public void setPerfis(Perfis[] perfis) {
		this.perfis = new ArrayList<Perfis>();
		for(Perfis p : perfis){
			this.perfis.add(p);
		}
	}
	
	public String getListaTel() {
		StringBuffer lista = new StringBuffer();
		if (this.telefones.isEmpty())
			return "-";
		else
			for (Telefone tel : this.getTelefones())
				lista.append(tel.toString() + " ");
		return lista.toString();
	}

	public boolean equals(Object obj) {
		return ((Usuario) obj).id == this.id;
	}
	
	
}
